package org.aug.demo.jvm.classpath.impl;

import org.aug.demo.jvm.classpath.Entry;

import java.io.IOException;
import java.nio.file.*;

//表示ZIP或JAR文件形式的类路径。这种情况下，class 的相对路径就是压缩内部的目录的路径。
public class ZipEntry implements Entry {

    private Path absolutePath;

    public ZipEntry(String path) {

        //获取绝对路径
        this.absolutePath = Paths.get(path).toAbsolutePath();
    }

    //java.nio 包提供了一个 FileSystem 类，可以快速读取压缩包。这个实现就变得非常简单了；
    @Override
    public byte[] readClass(String className) throws IOException {
        try (FileSystem zipFs = FileSystems.newFileSystem(absolutePath, null)) {
            return Files.readAllBytes(zipFs.getPath(className));
        }
    }

    @Override
    public String toString(){
        return this.absolutePath.toString();
    }


}
